//
//  YXUserAccount.swift
//  YXweibo
//
//  Created by AS on 5/13/16.
//  Copyright © 2016 AS. All rights reserved.
//

import UIKit
// 对象归档和解档
// 1.对象遵守NSCoding协议:知道对象要保存和解档哪些属性
// 2.调用归档和解档的方法

/// 保存用户账号
class YXUserAccount: NSObject, NSCoding {

    /// 用户授权的唯一票据
    var access_token:String?
    
    /// access_token的生命周期，单位是秒数, 基本数据类型不能使用 ? ,KVC会找不到
    var expires_in:NSTimeInterval = 0{
        didSet
            {
                 // KVC给expires_in属性赋值完后,来创建expiresDate
                expiresDate = NSDate(timeIntervalSinceNow: expires_in)
                
        }
    }
    
    
    /// 过期时间, 方便比较时间
    var expiresDate:NSDate?
    /// 授权用户的UID
    var uid:String?
    
    
    /// 用户昵称
    var screen_name:String?
    /// 用户头像地址（大图），180×180像素
    var avatar_large:String?
    
    /// 通过字典来创建模型
    
    init(dict:[String:AnyObject]) {
        super.init()
        // 对象创建好后才能使用对象的方法, 内部会调用setValue(value: AnyObject?, forKey key: String),每次拿一个key和value调用一次
        //2.00LBjRpF0uj2KS7d0869a1f66VtKPD
        // ["access_token": "2.00LBjRpF0uj2KS7d0869a1f66VtKPD", "expires_in": 157679999, "uid": 5338481925]
        
        setValuesForKeysWithDictionary(dict)
        
        //        setValue("2.00YJnIMG1HwIqD6ce68300a7XLvENE", forKey: "access_token")
        //        setValue(157679999, forKey: "expires_in")
        //        setValue(5676208596, forKey: "uid")
        //        setValue(157679999, forKey: "remind_in")


    }
     // 当setValue:forKey:找不到key时会调用setValue:forUndefinedKey:.如果不实现setValue:forUndefinedKey:就会报错
    override func setValue(value: AnyObject?, forKey key: String) {
        super.setValue(value, forKey: key)
        YXPrint(items: "\(key):\(value)")
    }
    
    override func setValue(value: AnyObject?, forUndefinedKey key: String) {
        YXPrint(items: "forUndefinedKey: \(key)")
    }
    // 打印方法 description属性
    override var description: String
        {
        let keys = ["access_token", "uid", "expires_in", "expiresDate", "screen_name", "avatar_large"]
        return dictionaryWithValuesForKeys(keys).description
//        get{
//            return "用户账户: access_token: \(access_token), expires_in: \(expires_in), uid: \(uid),expiresDate: \(expiresDate)"
//        }
    }
    //MARK:- 归档和解档
    ///解档
    required init?(coder aDecoder: NSCoder) {
        access_token = aDecoder.decodeObjectForKey("access_token")as? String
        expires_in = aDecoder.decodeDoubleForKey("expires_in")
        uid = aDecoder.decodeObjectForKey("uid")as? String
        expiresDate = aDecoder.decodeObjectForKey("expiresDate")as?NSDate
        
        screen_name = aDecoder.decodeObjectForKey("screen_name")as?String
        avatar_large = aDecoder.decodeObjectForKey("avatar_large")as?String
        
    }
    
      /// 归档
    func encodeWithCoder(aCoder: NSCoder) {
        aCoder.encodeObject(access_token,forKey: "access_token")
        aCoder.encodeDouble(expires_in, forKey: "expires_in")
        aCoder.encodeObject(uid,forKey: "uid")
        aCoder.encodeObject(expiresDate,forKey: "expiresDate")
        aCoder.encodeObject(screen_name,forKey: "screen_name")
        aCoder.encodeObject(avatar_large,forKey: "avatar_large")
        
    }
    
    
    
    
    
}
